延續昨天我們知道可訓練的資料為12967筆,而每一筆有21種資訊,我們可以建立神經網路、訓練模型,進一步繪製損失值的折線圖並算出資料的誤差百分比。搭建全連結網路模型這裡我要搭建三層全連結的網路架構,並且使用ReLU作為隱藏層的激活函數。
model = keras.Sequential(name = 'model-1')
model.add(layers.Dense(64,input_shape=(21,),activation='relu'))
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(1))
model.summary()
這樣我們就能看出我們搭建的三層網路
model.compile(keras.optimizers.Adam(0.001),
loss=keras.losses.MeanSquaredError(),
metrics=[keras.metrics.MeanSquaredError()])
model_dir = 'lab2-logs/models/'
os.makedirs(model_dir)
log_dir = os.path.join('lab-logs','model-1')
model_cbk = keras.callbacks.TensorBoard(log_dir=log_dir)
model_mckp = keras.callbacks.ModelCheckpoint(model_dir + '/Best-model-1.h5 ',moniter = 'val_mean_absolute_error',save_best_only=True,mode='min')
history = model.fit(x_train,y_train,batch_size=64,epochs=300,validation_data=(x_val,y_val),callbacks=[model_cbk,model_mckp])
在model.compile已經將損失直設為均方誤差,所以history紀錄的loss和val_loss為mean squared error損失函數所計算出來的損失值。
plt.plot(history.history['loss'],label = 'train')
plt.plot(history.history['val_loss'],label = 'validation')
plt.ylabel('loss')
plt.xlabel('epochs')
plt.legend(loc = 'upper right')
model.load_weights('lab2-logs/models/Best-model-1.h5')
y_test = np.array(test_data['price'])
test_data =(test_data - mean) /std
x_test = np.array(test_data.drop('price',axis='columns'))
y_pred=model.predict(x_test)
y_pred=np.reshape(y_pred*std[‘price’]+mean[‘price’], y_test.shape)
percentage=np.mean(y_test-y_pred)/np.mean(y_test)*100
print(percentage)
這個例子是我參考書及上面的,但越到後面的程式碼我越不懂,因此我會以這次的程式碼裡面我不懂的地方下去研究,在往後的文章講解,希望到時候我能了解全部。